package com.jiazixuan.stock.controller;

import com.jiazixuan.stock.pojo.domain.MenusPermDomain;
import com.jiazixuan.stock.pojo.entity.SysRole;
import com.jiazixuan.stock.service.RoleService;
import com.jiazixuan.stock.vo.req.AddRolesAndPermsReqVo;
import com.jiazixuan.stock.vo.req.UpdatePermsByRoleIdReqVo;
import com.jiazixuan.stock.vo.req.UserRolesReqVo;
import com.jiazixuan.stock.vo.resp.PageResult;
import com.jiazixuan.stock.vo.resp.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api")
public class RoleController {

    @Autowired
    private RoleService roleService;

    /**
     * 获取用户具有的角色信息，以及所有角色信息
     */
    @GetMapping("/user/roles/{userId}")
    public R<Map<String,Object>> getUserInfomation(@PathVariable(name = "userId",required = true) String userId){
        return roleService.getUserInfomation(userId);
    }

    /**
     * 更新用户角色信息
     */

    @PutMapping("/user/roles")
    public R updateUserRoles(@RequestBody UserRolesReqVo UserRoles){
        return roleService.updateUserRoles(UserRoles);
    }

    /**
     * 分页查询当前所有角色信息
     */
    @PostMapping("/roles")
    public R<PageResult<SysRole>> getRoles(@RequestBody Map<String,Integer> map){
        return roleService.getRoles(map.get("pageNum"),map.get("pageSize"));
    }

    /**
     *树状结构回显权限集合,底层通过递归获取权限数据集合
     */
    @GetMapping("/permissions/tree/all")
    public R<List<MenusPermDomain>> getMenusPermissions(){
        return roleService.getMenusPermissions();
    }

    /**
     * 添加角色和角色关联权限(添加角色权限功能实现)
     */
    @PostMapping("/role")
    public R addRoleAndRolePermission(@RequestBody AddRolesAndPermsReqVo vo){
        return roleService.addRoleAndRolePermission(vo);
    }

    /**
     * 根据角色id查找对应的权限（点击角色编辑弹窗）
     */
    @GetMapping("/role/{roleId}")
    public R<List<String>> getPermsByRoleId(@PathVariable String roleId){
        return roleService.getPermsByRoleId(roleId);
    }

    /**
     * 更新角色信息，包含角色关联的权限信息（完成角色编辑）
     */
    @PutMapping("/role")
    public R updateRoleAndPermission(@RequestBody UpdatePermsByRoleIdReqVo vo){
        return roleService.updateRoleAndPermission(vo);
    }

    /**
     * 根据角色id删除角色信息
     */
    @DeleteMapping("/role/{roleId}")
    public R deleteRole(@PathVariable(value = "roleId") String roleId){
        return roleService.deleteRole(roleId);
    }

    /**
     * 更新用户的状态信息
     */
    @PostMapping("/role/{roleId}/{status}")
    public R updateStatus(@PathVariable(value = "roleId") String roleId,
                          @PathVariable(value = "status") Integer status){
        return roleService.updateStatus(roleId,status);
    }
}
